#ifndef INC_VIDEOCARDID_HPP
#define INC_VIDEOCARDID_HPP

#include <string>
#include <vector>

//	Defines
//	==========================================================================
#define uint8 unsigned char

//	Enums
//	==========================================================================

//	Forward declarations
//	==========================================================================
class RegKey;

struct Driver
{
	std::string			m_Version;
	std::string			m_Date;
	std::string			m_Provider;
};

struct NVidia 
{
	std::string			adapter;
	std::string			bios;
	std::string			chiptype;
	std::string			dactype;
};

struct Hardware
{
	Hardware() : 
		m_ChipType("-"),
		m_MemorySizeMB(-1),
		m_MemoryType("-"),
		m_AGPRate("-")
		{}

	// Chip info
	std::string			m_ChipType;

	// Memory info
	int					m_MemorySizeMB;
	std::string			m_MemoryType;

	// Misc
	std::string			m_AGPRate;

	NVidia				nvidia;
};

struct VideoDevice
{
	std::string			m_Description;
	std::string			m_Manufacturer;
	
	Driver				m_Driver;
	Hardware			m_Hardware;
};

class VideoID
{
public:
	bool GetInfo( void );
	bool GetInfo2( void );

	std::vector<VideoDevice>		m_VideoDevices;
private:
	bool ReadDeviceMap( void );
	void ReadSingleDeviceFromDeviceMap( RegKey& key );
	bool FindCorrespondingPrimaryDevice( std::string secondary );

	void ReadDriverInfo2( VideoDevice& videocard, RegKey& key );
	void ReadATIInfo( VideoDevice& videocard, RegKey& key );
	void ReadNVIDIAInfo( VideoDevice& videocard );
};

#endif // INC_VIDEOCARDID_HPP


//------------------------------------------------------------------------
// Copyright (c) 2005 Rick Appleton
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//    claim that you wrote the original software. If you use this software
//    in a product, an acknowledgment in the product documentation would
//    be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such, and must not
//    be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source
//    distribution.
//
// Rick Appleton
// www.daedalus-development.net
//------------------------------------------------------------------------
